home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Mission 3
/
Mission 3.zip
/
Mission 3.iso
/
demovers
/
scripter
/
libs
/
io.lib
next >
Wrap
Text File
|
1998-09-26
|
3KB
|
66 lines
/*
* Diese Funktion läßt den Anwender einen beliebigen String
* per Tastatur editieren.
* Folgende Sondertasten werden berücksichtigt:
* - Backspace: Zeichen vor dem Cursor löschen
* - Delete: Zeichen unter dem Cursor löschen
* - Escape: Eingabe löschen
* - Return: schließt die Eingabe ab
* - Cursor links/rechts: bewegt den Cursor entsprechend
*
* Der Aufruf erfolgt durch
* input(stringvariable)
*/
proc input(&a)
local cursor, c, line, temp;
{
printf("\033j%s", a); // aktuellen Inhalt zeigen
cursor = 0; // Position des Cursors
falsch = 1;
do {
c = inkey(); // auf Taste warten
switch (c[0]) {
case 27: // Escape?
cursor = 0;
a = ""; // Eingabe löschen
printf("\033k%s\033K", a); // Ausgabe aktualisieren
break;
case '\b': // Backspace?
if (cursor == 0)
break;
--cursor; // Cursor nach links
/*fall thru*/ // Rest wie <Delete>
case 127: // Delete?
delete(a, cursor, 1); // Zeichen unter dem Cursor löschen
printf("\033k%s\033K", a); // Ausgabe aktualisieren
break;
case '\r': // Return?
printf("\033k"); // Cursor an alte Position
return; // fertig
default:
if (c[0] == 0) { // kein sichtbares Zeichen?
if (c[1] == 77) { // Scancode: Cursor rechts?
if (cursor < a.length)
++cursor;
}
else if (c[1] == 75) { // Scancode: Cursor links?
if (cursor)
--cursor;
}
}
else {
sprintf(temp, "%c", c[0]); // Zeichen -> String
insert(a, cursor, temp); // Zeichen einfügen
++cursor; // Cursor weitersetzen
printf("\033k%s", a); // Ausgabe aktualisieren
}
}
} while (1);
}